3
תגובות

static - טוב או לא?

פתח zacharya ,
אוקי השאלה הזאת די מופנת לאלכס אני מניח אבל אשמח אם כל מי שיש לו דעה ומבין בנושא יגיב כאן.
בספר של אלכס בנושא הOOP יש פרק (נראה לי שלם) שעוסק בסטטיות, אבל בעיקרון רשום שם רק חסרונות של סטטיות ולא ראיתי אף יתרון אחד. השאלה היא האם בJAVA, שסטטי זה דבר נורא נפוץ ומשומש שם (למשל יצירת מופע של Scanner), בכל זאת עדיף לא להשתמש בסטטי?

3 תשובות

avatar ענה intval ב 28 לאפריל 2014 #

בסדר הפוך:
המחלקה scanner היא לא מחלקה סטטית ואפשר ליצור כמה מופעים שלה שתרצה.

שנית, אתה משתמש ב"סטטי" כדי להבטיח שיש לך מופע אחד של מחלקה בלבד. יש דרך הרבה יותר פשוטה להבטיח שיש לך מופע אחד של מחלקה וזה להעביר אותה בתור פרמטר למחלקה שלך.

כלומר במקום

class X
{
  private static Scanner scanner = new Scanner(..);
}

פשוט להעביר אותו בתור פרמטר ולדאוג שאתה יוצר אותו רק פעם אחת לפני
class X
{
  private Scanner scanner;
  public X(Scanner scanner)
  {
    this.scanner = scanner;
  }
}



באופן כללי:
לסטטיק יש שני יתרונות והם:
1. שימוש בפחות זיכרון
2. זיכרון משותף בין כמה מופעים של אותה מחלקה

בPHP התוכנה שלך לא רצה כמה ימים והרווח משימוש מופחת בזיכרון הוא פחות ממזערי, לאומת זאת הסיכוי לעשות שטויות גבוה מאוד. למען האמת, גם בקוד java רצוי להימנע מסטטי עד כמה שאפשר, אבל אציין שיש מקרים בהם סטטי היא הדרך הכי פשוטה לעשות דברים מסוימים, אמנם כנראה לא תצטרך לעשות אותם הי פעם ב-PHP

avatar ענה zacharya ב 28 לאפריל 2014 #

לא טענתי שscanner היא סטטי אלא שלרוב יוצרים מופע סטטי שלה.
הבנתי את הדרך שלך בנוגע ליצירת מופע אחד בלבד ללא סטטי, אך רשמת "אבל אציין שיש מקרים בהם סטטי היא הדרך הכי פשוטה לעשות דברים מסוימים" ואשמח לקבל פירוט אם לא אכפת לך ^^

avatar ענה intval ב 28 לאפריל 2014 #

העובדה שיש לך משהו משותף בין מופעים של מחלקות מאפשר לגישה פשוטה יותר למידע מכל מקום.
ב-PHP מעטים המקרים שבהם יהיו לך במקביל כמה מופעים של אותה מחלקה, שהיא לא DTO (וגם בג'אווה)
אבל כאשר יש לך מופעים שונים של אותה מחלקה - משתנים סטטים זו הדרך הכי פשוטה להעביר נתונים בין אותם מופעים (וגם אז לא תמיד הכי מומלצת)